#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <dirent.h>
#include <unistd.h>
#include <sys/stat.h>

#define MAXPATH 128

int myrmdir(const char *dir) 
{
	struct stat statbuf;
	struct dirent *dirp;
	DIR *dp;
	char filebuf[MAXPATH];


	if ((dp = opendir(dir)) == NULL) {
		fprintf(stderr, strerror(errno));	
		return (-1);
	}	

	while ((dirp = readdir(dp)) != NULL) {
		if (strcmp(dirp->d_name, ".") == 0 || strcmp(dirp->d_name, "..") == 0)	
			continue;

		strcpy(filebuf, dir);
		if (filebuf[strlen(filebuf) - 1] != '/')
			strcpy(filebuf + strlen(filebuf), "/\0");
		strcpy(filebuf + strlen(filebuf), dirp->d_name);

		if (lstat(filebuf, &statbuf) < 0) {
			fprintf(stderr, strerror(errno));	
			return (-1);
		}
		if (S_ISREG(statbuf.st_mode)) {
			if (remove(filebuf) < 0) {
				fprintf(stderr, strerror(errno));	
				return (-1);
			}	
		}
		else if (S_ISDIR(statbuf.st_mode)) {
			if (myrmdir(filebuf) < 0) 
				return (-1);	
		}
	}

	if (closedir(dp) < 0) {
		fprintf(stderr, strerror(errno));
		return (-1);
	}
	if (rmdir(dir) < 0) {
		fprintf(stderr, strerror(errno));	
		return (-1);
	}

	return 0;
}

int main(int argc, char **argv)
{
	if (myrmdir(argv[1]) < 0) {
		fprintf(stderr, strerror(errno));	
		return (-1);
	}	

	return 0;
}

